﻿
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public final class DateHelper {
    public static void main(String[] args) {

    }

    private static  DateHelper instance = new DateHelper();

    private DateHelper() {
    }

    //随后在 DateHelper 类中提供一个 类方法 用于获取 DateHelper 类的实例
    public static DateHelper getInstance() {
        // 自行设计实现过程
        return instance;
    }

    public Date toDate(int year , int month , int date , int hourOfDay , int minute ) {
        // 可以将 秒 和 毫秒 部分直接设置为 零
        return toDate(year, month, date, hourOfDay, minute,0,0);
    }

    public Date toDate( int year , int month , int date , int hourOfDay , int minute , int second ) {
        // 可以将 毫秒 部分直接设置为 零
        return toDate(year, month, date, hourOfDay, minute,second,0);
    }

    public Date toDate( int year , int month , int date , int hourOfDay , int minute , int second , int millis ) {
        Calendar calendar = new GregorianCalendar();
        calendar.set(year, month,date,hourOfDay,minute,second);
        calendar.set(Calendar.MILLISECOND,millis);
        return calendar.getTime();
        // 自行设计实现过程
    }

    public String toString( final Calendar date ) {
        StringBuilder builder = new StringBuilder();
        // 从 Calendar实例 中 获取 各个日历字段 的值 并 连接到 字符序列 中
        builder.append(date.get(Calendar.YEAR) + "年");

        int month = date.get(Calendar.MONTH)+1;
        if (month < 10){
            builder.append('0');
        }
        builder.append(month).append("月");

        int dates = date.get(Calendar.DATE);
        if (dates<10){
            builder.append('0');
        }
        builder.append(date.get(Calendar.DATE) + "日");

        int hours = date.get(Calendar.HOUR_OF_DAY);
        if (hours<10){
            builder.append('0');
        }
        builder.append(date.get(Calendar.HOUR_OF_DAY) + ":");

        int minutes = date.get(Calendar.MINUTE);
        if (minutes<10){
            builder.append('0');
        }
        builder.append(date.get(Calendar.MINUTE) + ":");

        int seconds = date.get(Calendar.SECOND);
        if (seconds<10){
            builder.append('0');
        }
        builder.append(date.get(Calendar.SECOND) + ".");

        int millis = date.get(Calendar.MILLISECOND);
        if (millis<10){
            builder.append("00");
        }else if (millis < 100){
            builder.append('0');
        }
        builder.append(date.get(Calendar.MILLISECOND) + "");
        // 返回 Calendar实例 对应的字符序列
        String s = builder.toString();
        return s;
    }

    public String toString( final Date date ) {

        // 实现思路:

        // 1、获取一个 Calendar 实例

        // 2、清空 Calendar 实例的 日历字段值 和 时间值

        // 3、将 参数 date 所表示的瞬间设置到 新创建的 Calendar 实例中

        // 4、调用 toString( Calendar ) 方法获取 Calendar实例 的字符串形式

        // 5、将 Calendar实例 的字符串形式 直接返回即可
        Calendar calendar = Calendar.getInstance();

        calendar.clear();

        calendar.setTime( date );

        String s = toString(calendar);

        return s;
    }


    public int durationOfDays( Date first , Date second ) {
        // 自行设计实现过程


        if (first.before(second) ){
            long s = second.getTime() - first.getTime();
            long day = 1000L * 60 * 60 *24;
            int x = (int) Math.ceil(s / day);
            return -x;
        } else if (first.equals(second)){
            return 0;
        } else
        {
            long s = first.getTime() - second.getTime();
            long day = 1000L * 60 * 60 *24;
            int x = (int) Math.ceil(s / day);
            return x;
        }

    }


}
